/*
 * Copyright 2009 Tran Nhut Trung.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.gdevelop.gwtxp.rebind.gwt;


import com.gdevelop.gwtxp.rebind.AbstractTag;
import com.gdevelop.gwtxp.rebind.Tag;
import com.gdevelop.gwtxp.rebind.el.ELParser;
import com.gdevelop.gwtxp.rebind.el.Node;

import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.NotFoundException;
import com.google.gwt.user.client.ui.Image;

import org.w3c.dom.Attr;


public class ImageTag extends AbstractTag{
  public ImageTag() {
  }

  public Class getUIClass() {
    return Image.class;
  }

  public void generateDeclaration() throws NotFoundException {
    boolean isFromImageBundle = false;
    String url = this.getAttribute("url");
    Node elNode = null;
    if (url != null){
      elNode = ELParser.parse(url);
      JClassType returnType = elNode.getReturnType(elContext);
      if (TYPE_AbstractImagePrototype.isAssignableFrom(returnType)){
        isFromImageBundle = true;
      }
    }

    String className = this.getUIClass().getSimpleName();
    if (isFromImageBundle){
      out.println(className + " " + varName + " = " + elNode.generateGetExpression(elContext) + ".createImage();");
    }else{
      out.println(className + " " + varName + " = new " + className+ "();");
    }
  }

  public void generateAddUI(Tag child) {
    // No-op
  }
  
  protected void generateSetAttributeByExpression(Attr attr) throws NotFoundException {
    if ("url".equals(attr.getLocalName())){
      Node elNode = ELParser.parse(attr.getValue());
      JClassType returnType = elNode.getReturnType(elContext);
      if (!TYPE_AbstractImagePrototype.isAssignableFrom(returnType)){
        super.generateSetAttributeByExpression(attr);
      }
    }else{
      super.generateSetAttributeByExpression(attr);
    }
  }
}
